Deep Security Manager 11.0 On WindowsをCloudFormationを使って構築してみた
おはようございます、もきゅりんです。 10連休ってどこも混んでるのだろうし、ずっと家でぱそこんを触っているわけにもいかないだろうし、 どこで何すればいいのだろう、と今から悩みが尽きません。
贅沢な悩みですね。
今回は、掲題の通り、CloudFormationで最新(2019年3月22日現在)のDeepSecurityManager11.0をWindowsサーバーにインストールする記事となります。
DeepSecurityManager(以下、DSM)を利用する機会はあまりないかとは思いますが、どなたかの参考になるかも、ということでブログ化しておきます。
また、今回利用したCloudFormationテンプレートも掲載しておきます。 手を加えたり修正することで、他の方が利用できたら幸いです。
ただし、ご利用の際は下記の環境、前提、注意事項などの記載はよくお読みの上、お使い下さい。
はじめに
当稿は、[Deep SecurityでEC2徹底防御]シリーズの記事に大きく依存した内容となっております。 なので、DeepSecurityって...という感じの場合、まずは[Deep SecurityでEC2徹底防御]シリーズを読むことをお勧めします。
とても整理されて読みやすいため、DeepSecurityとは?が、スラスラと頭に入ってくること間違いないありません。
環境
環境については、DeepSecurityManager システム要件から下記の通りです。
- Windows Server 2016 (64bit)
- PostgreSQL 9.6.x (Amazon RDS for PostgreSQL)
前提
- VPCが作成済みであること (デフォルトでも可)
-
RDS用のサブネットが作成済みであること (デフォルトでも可)
-
DSMをインストールするサーバーを置くパブリックサブネットが作成済みであること
-
サーバーにログインする鍵を作成済みであること
-
Deep Securityの検証・評価のために30日間の体験版アクティベーションコードを取得していること (右記から簡単に取得ができます。) Trend Micro Deep Security | 体験版ダウンロード
作成されるリソース
このテンプレートで作成されるリソースは以下です。
- 最新のWindows Server 2016のEC2インスタンス
-
Amazon RDS for PostgreSQL 9.6.11
-
DBサブネットグループ
-
セキュリティグループ
ポート番号/プロトコル | 用途 | 許可対象 |
---|---|---|
4119/tcp | DSMのWeb管理画面の待受ポート | 管理端末IP(後述) |
4120/tcp | DSA/DSRからDSMへ通信するポート | DSA/DSR(今回はVPCのネットワークアドレス) |
4122/tcp | DSAからDSRへ通信するポート | DSA(今回はVPCのネットワークアドレス) |
ポイント
- 環境変数でRDSを別に起動するかどうか分岐
- SSMのパラメータストアからWindows Server 2016の最新AMIを取得
- PowerShellでCドライブにディレクトリ作ってDSM11.0をダウンロード
注意事項
- 必要な管理端末のIPは自身で追加・更新する
- DBインスタンスの削除保護設定は無効
- DBのパブリックアクセスは無効
- オプショングループはデフォルト
- デフォルトのMultiAZ設定はfalse
- DSMサーバーのメモリが最低でも4GBが必須なので、t2.mediumにしている
- PostgreSQLのversionは直打ち
CloudFormationテンプレート
こちらで対応します。利用するパラメータはjsonファイルで例示しておきます。
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Deep Secutiry Manager Windows 11.0 template", "Parameters": { "KeyName": { "Description": "Name of an existing EC2 KeyPair to enable SSH access to the instances", "Type": "AWS::EC2::KeyPair::KeyName" }, "EnvType": { "Description": "must specify prod or test. If you specify prod, RDS PostgreSQL DB Instance create and use it.", "Default": "stg", "Type": "String", "AllowedValues": [ "prod", "stg" ] }, "DBMasterUsername": { "Description": "DSM DB master username", "Type": "String" }, "DBMasterPassword": { "Description": "DSM DB master password", "NoEcho": "true", "Type": "String" }, "DBName": { "Description": "DSM DB Name", "Default": "dsm", "Type": "String" }, "VPC": { "Description": "VPC ID : vpc-XXXXXXXX", "Type": "String" }, "VPCCIDR": { "Description": "VPC CIDR Address : x.x.x.x/x", "Type": "String" }, "FrontendSubnet": { "Description": "will deploy DSM Instance : subnet-XXXXXXXX", "Type": "String" }, "DBSubnetGroup": { "Description": "will apply to RDS DB instance", "Type": "String", "ConstraintDescription": "must specify if you specify prod environment." }, "PostgreSQLOptionGroup": { "Description": "the Option Group name for PostgreSQL RDS", "Type": "String", "Default": "default:postgres-9-6" }, "ImageId": { "Type": "AWS::SSM::Parameter::Value", "Default": "/aws/service/ami-windows-latest/Windows_Server-2016-Japanese-Full-Base" } }, "Mappings": { "StackConfig": { "DeepSecurityManagerServer": { "InstanceType": "t2.medium", "AllocatedStorage": "80" }, "DeepSecurityDBServer": { "InstanceType": "db.t2.small", "AllocatedStorage": "20", "DBName": "dsm" } }, "IpAddress": { "Client": { "home": "YOUR_IP/32" } } }, "Conditions": { "CreateProdResources": { "Fn::Equals": [ { "Ref": "EnvType" }, "prod" ] } }, "Resources": { "DeepSecurityManagerSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "VpcId": { "Ref": "VPC" }, "GroupDescription": "Deep Security Manager", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": "3389", "ToPort": "3389", "CidrIp": { "Fn::FindInMap": [ "IpAddress", "Client", "home" ] } }, { "IpProtocol": "tcp", "FromPort": "4119", "ToPort": "4119", "CidrIp": { "Fn::FindInMap": [ "IpAddress", "Client", "home" ] } }, { "IpProtocol": "tcp", "FromPort": "4120", "ToPort": "4120", "CidrIp": { "Ref": "VPCCIDR" } }, { "IpProtocol": "tcp", "FromPort": "4122", "ToPort": "4122", "CidrIp": { "Ref": "VPCCIDR" } } ] } }, "DeepSecurityManagerSecurityGroupIngress": { "Type": "AWS::EC2::SecurityGroupIngress", "Properties": { "GroupId": { "Ref": "DeepSecurityManagerSecurityGroup" }, "IpProtocol": "tcp", "FromPort": "4120", "ToPort": "4120", "CidrIp": { "Fn::Join": [ "", [ { "Ref": "DSMInstanceEIP" }, "/32" ] ] } } }, "DeepSecurityManagerSecurityGroupIngress2": { "Type": "AWS::EC2::SecurityGroupIngress", "Properties": { "GroupId": { "Ref": "DeepSecurityManagerSecurityGroup" }, "IpProtocol": "tcp", "FromPort": "4122", "ToPort": "4122", "CidrIp": { "Fn::Join": [ "", [ { "Ref": "DSMInstanceEIP" }, "/32" ] ] } } }, "DeepSecurityAgentSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "VpcId": { "Ref": "VPC" }, "GroupDescription": "Enable Deep Security Agent access via port 4118 from DSM", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": "4118", "ToPort": "4118", "SourceSecurityGroupId": { "Ref": "DeepSecurityManagerSecurityGroup" } } ] } }, "PostgreSQLSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Condition": "CreateProdResources", "Properties": { "VpcId": { "Ref": "VPC" }, "GroupDescription": "Enable PostgreSQL access via port 5432 from VPC", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": "5432", "ToPort": "5432", "CidrIp": { "Ref": "VPCCIDR" } } ] } }, "DSMInstanceEIP": { "Type": "AWS::EC2::EIP", "Properties": { "Domain": "vpc", "InstanceId": { "Ref": "DSMInstance" } } }, "DSMInstance": { "Type": "AWS::EC2::Instance", "Properties": { "InstanceType": { "Fn::FindInMap": [ "StackConfig", "DeepSecurityManagerServer", "InstanceType" ] }, "BlockDeviceMappings": [ { "DeviceName": "/dev/sda1", "Ebs": { "VolumeSize": { "Fn::FindInMap": [ "StackConfig", "DeepSecurityManagerServer", "AllocatedStorage" ] } } } ], "KeyName": { "Ref": "KeyName" }, "SubnetId": { "Ref": "FrontendSubnet" }, "SourceDestCheck": "false", "ImageId": { "Ref": "ImageId" }, "SecurityGroupIds": [ { "Ref": "DeepSecurityManagerSecurityGroup" } ], "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "<script>", "\n", "PowerShell -ExecutionPolicy RemoteSigned -Command {Set-ExecutionPolicy RemoteSigned}", "\n", "</script>", "\n", "", "\n", "cfn-init.exe -v -s ", { "Ref": "AWS::StackId" }, " -r DSMInstance --region ", { "Ref": "AWS::Region" }, "\n", "" ] ] } }, "Tags": [ { "Key": "Name", "Value": "DeepSecurityManager" } ] }, "Metadata": { "AWS::CloudFormation::Init": { "config": { "files": { "C:\\DL_DSM.ps1": { "content": { "Fn::Join": [ "", [ "New-Item C:\\Classmethod -ItemType Directory", "\n", "$client = (new-object System.Net.WebClient)", "\n", "Invoke-WebRequest -Uri \"https://files.trendmicro.com/products/deepsecurity/en/11.0/Manager-Windows-11.0.319.x64.exe\" -OutFile \"C:\\Classmethod\\Manager-Windows-11.0.319.x64.exe\"", "\n" ] ] } } }, "commands": { "01_install_DeepSecurityManager": { "command": "powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File C:\\DL_DSM.ps1" } } } } } }, "DSMDBInstance": { "Type": "AWS::RDS::DBInstance", "Condition": "CreateProdResources", "Properties": { "DBInstanceClass": { "Fn::FindInMap": [ "StackConfig", "DeepSecurityDBServer", "InstanceType" ] }, "DBName": { "Ref": "DBName" }, "StorageType": "gp2", "AllocatedStorage": { "Fn::FindInMap": [ "StackConfig", "DeepSecurityDBServer", "AllocatedStorage" ] }, "Engine": "postgres", "EngineVersion": "9.6.11", "MultiAZ": "false", "MasterUsername": { "Ref": "DBMasterUsername" }, "MasterUserPassword": { "Ref": "DBMasterPassword" }, "BackupRetentionPeriod": "7", "DBSubnetGroupName": { "Ref": "DBSubnetGroup" }, "OptionGroupName": { "Ref": "PostgreSQLOptionGroup" }, "PreferredBackupWindow": "19:30-20:00", "PreferredMaintenanceWindow": "sat:00:00-sat:00:30", "PubliclyAccessible": false, "VPCSecurityGroups": [ { "Ref": "PostgreSQLSecurityGroup" } ] } } }, "Outputs": { "DeepSecurityManagerURL": { "Value": { "Fn::Join": [ "", [ "https://", { "Ref": "DSMInstanceEIP" }, ":4119/" ] ] }, "Description": "-" } } }
# parameter.json [ { "ParameterKey": "KeyName", "ParameterValue": "YOUR_SECRET_KEY" }, { "ParameterKey": "EnvType", "ParameterValue": "prod" }, { "ParameterKey": "DBMasterUsername", "ParameterValue": "root" }, { "ParameterKey": "DBMasterPassword", "ParameterValue": "dbpasswd" }, { "ParameterKey": "VPC", "ParameterValue": "VPC_ID" }, { "ParameterKey": "VPCCIDR", "ParameterValue": "172.31.0.0/16" }, { "ParameterKey": "FrontendSubnet", "ParameterValue": "SUBNET-ID" }, { "ParameterKey": "DBSubnetGroup", "ParameterValue": "default" } ]
実際にスタックを作成します。
aws cloudformation create-stack --stack-name dsm-win16-posgresql --template-body file://`pwd`/hogehoge.template --parameters file://`pwd`/parameter.json
DSMインストール
僕はMacを使っているので、Parallels ClientでWindowsに接続します。
参考: macOSからWindowsにリモートデスクトップする時はParallels Clientがキーボード入力も快適でオススメ
CドライブにDLしたDSM11.0をインストールします。
必要な情報を入力していきます。
インストールします。
ログインして確認。
最後に
PostgreSQLの対応されるようになったようなので、リーズナブルにDBの利用ができるようになりましたね。
どこかの誰かのお役に立ったら何よりです。
参考
[Deep SecurityでEC2徹底防御] #01 概要とAWS環境でのインストール
[小ネタ] AWS Management ConsoleからWindows Server 2016日本語版AMIを探す
パラメーターストアから最新のWindows AMIのIDを取得する
macOSからWindowsにリモートデスクトップする時はParallels Clientがキーボード入力も快適でオススメ